package com.event.management.backend.util;

/**
 * URL工具类
 * 用于处理URL相关操作
 */
public class UrlUtils {
    
    /**
     * 数据库中cover字段的最大长度（保守估计为255）
     */
    public static final int MAX_URL_LENGTH = 255;
    
    /**
     * 处理URL，确保其长度不超过数据库限制
     * 如果URL过长，会进行截断或压缩处理
     * 
     * @param url 原始URL
     * @return 处理后的URL
     */
    public static String processUrl(String url) {
        if (url == null) {
            return null;
        }
        
        // 如果URL超过最大长度，进行截断处理
        if (url.length() > MAX_URL_LENGTH) {
            // 方案1：截断，保留前面部分（可能不是有效URL了）
            // return url.substring(0, MAX_URL_LENGTH);
            
            // 方案2：使用短链接服务（这里只是示例，实际项目中可替换为真实的短链接服务）
            // 在实际项目中，可以集成短链接服务如t.ly, bit.ly等
            // return shortenUrl(url);
            
            // 简单起见，这里实现一种保留URL的基本部分的方法
            return shortenUrlPreserveStructure(url);
        }
        
        return url;
    }
    
    /**
     * 保留URL结构的缩短方法
     * 保留协议、域名和路径的前后部分，中间部分用"..."替代
     * 
     * @param url 原始URL
     * @return 缩短后的URL
     */
    private static String shortenUrlPreserveStructure(String url) {
        // 找出协议和域名部分
        int protocolEnd = url.indexOf("://");
        if (protocolEnd == -1) {
            protocolEnd = 0;
        } else {
            protocolEnd += 3; // 包含"://"
        }
        
        int pathStart = url.indexOf("/", protocolEnd);
        if (pathStart == -1) {
            pathStart = url.length();
        }
        
        String protocol = url.substring(0, pathStart);
        String path = pathStart < url.length() ? url.substring(pathStart) : "";
        
        // 计算剩余可用长度
        int remainingLength = MAX_URL_LENGTH - protocol.length() - 3; // 3是"..."的长度
        
        if (remainingLength <= 20) { // 如果剩余长度太小，直接截断
            return url.substring(0, MAX_URL_LENGTH);
        }
        
        // 保留路径的前10个字符和后10个字符，中间用"..."替代
        if (path.length() > remainingLength) {
            int frontChars = remainingLength / 2;
            int backChars = remainingLength - frontChars;
            path = path.substring(0, frontChars) + "..." + path.substring(path.length() - backChars);
        }
        
        return protocol + path;
    }
} 